JAVA - 物件導向入門


Posted by pei_______ on 2022-05-15

JAVA物件導向案例-Shape.java & Main.java

Shape.java

public class Shape{

    public int a;
    public void test(){

        // test函式中自定義的a
        int a = 3;

        // this = self的概念
        // 表示此類別底下的a(外面的a)
        // this也可省略
        this.a = 5;
    }
}

Main.java

import java.util.Scanner;

public class Main{

    public static void main(String[] args){

    // 實體化 instance
    // sc是Scanner類別的實體
    // s1, s2是Shape類別的實體
    Scanner sc = new Scanner(System.in);

    Shape s1 = new Shape(); //s1 object
    Shape s2 = new Shape(); //s2 object

    s1.test();
    System.out.println(s1.a);
    // 因有呼叫test初始化a,a = 5
    System.out.println(s2.a);
    // 無呼叫test,a = 預設值 = 0
    }
}
  1. 一個檔案只會對應一個class
  2. class底下可以有多個屬性attribute方法Method
  3. this.attribute 表示現在操作物件底下的屬性



封裝等級

class

封裝等級 修飾字 class 類別名稱 extends 父類別 inplements 介面
public class main

method

封裝等級 修飾字 輸出值 函式名稱 輸入值
public static void main (int i)
  • 會設定在class或class下一層級 (屬性 / 方法)
  • 主要影響 => 直接存取 vs 間接存取
  1. public: 公用等級資料型態
  2. private: 私用等級資料型態
  3. protected: 保護性等集資料型態
  4. 空白: package等級(預設) => 同一個package底下的class可以存取

間接設定器 mutator / 間接存取器 accessor

public class Student{

    private int score;

    // mutator (setter)
    public void setScore(int score){
        if (score < 0 || score > 100){
            this.score = 0;
            return;
        }
        this.score = score;
    }

    // accessor / getter
    public int getScore(){
        return this.score;
    }
}



存取修飾詞與範例

01. static

  1. 生命週期同程式,在程式創建起來就存在了 (ex. Main)
  2. 記憶體位置儲存在global裡 (而非stack或heap)
// 範例
// Test.java
public class Test{

    // 程式一開始a就存在了
    public state int a;

}

// 範例
// Main.java
public class Main{

    public static void main(String[] args){

    // 故可以直接透過類別名稱取得a,不用經過實體
    Test.a = 5;

    // 也可透過物件初始化取得
    Test t = new Test();
    t.a = 5;

    // 因t & t2 找到的a是一樣的(global內)
    // 故從t2修改會改變變數本身
    Test t2 = new Test();
    t2.a = 3;


    // 故print結果都是3
    System.out.println(t.a);
    System.out.println(t2.a);

    }
}


// 常用作流水號記數

public class Test{

    private state int serial;
    public state int a;

    public Test(){
        this.serial++;
        this.a = 5;
    }

    // 因無static,必須透過物件才可使用函式
    public int getSerial(){

        //是類別的層級
        return Test.serial;
    }
}

02. final

  1. 創建後即無法再做修改
  2. 創建當下必須初始化(因無法再修改)
    ex. final int a = 5;
    

03. static final

  1. 表示常數
  2. 變數名稱需全大寫
    private static final double PI = 3.14d;
    

Class建構子: 建構物件時需同時設定的初始值

ex 1. Scanner sc = new Scanner(System.in);

ex 2. Student s1 = new Student(Penny, 85);

class 內部設定

public class Student{

    private String name;
    private int score;

    // 建立建構子,初始時必須輸入資料
    // 若無建立,則JAVA會設定為預設 = 0
    public Student(String name, int score){
        this.name = name;
        this.score = score;
    }   
}

#java #課堂筆記







Related Posts

React 入門 0 - 開始寫 React 之前

React 入門 0 - 開始寫 React 之前

[Note] React: Component props

[Note] React: Component props

Next.js

Next.js


Comments